package java5;

import java.util.*;

/**
 * @author a1
 * @desc 泛型
 * @create 2018-06-19 23:22
 */
public class GenericsTest {

    public static void main(String[] args) {
        //JDK 1.5之前，存在转换风险
        List list = new ArrayList();
        list.add(new Integer(1));
        list.add("2");
        list = new ArrayList<String>();

        Map<String,String>m =new HashMap<>();
        m.put("a","1");
        list =new ArrayList();
        list.add(m);
        //不能往一个使用了? extends的数据结构里写入任何的值
        List<? extends HashMap> extendsProduct=new ArrayList<>(list);//初始化的时候，可以加入

     //   map.add(new HashMap()); //编译不过
       for(HashMap ss:extendsProduct){
           System.out.println(ss.get("a"));

       }
        List<? super Map> consumeSuper=new ArrayList<>(list);
        consumeSuper.add(new HashMap());
        //无法读取
        /**
        for(Map bb:consumeSuper){
            System.out.println(bb.get("a"));

        }
         */

        //可以作为参数传入
        /**
         *
         * public void pushAll(Iterable<E> src){
         for(E e : src)
         push(e)
         }
         *
         *
         * */


        //Collections.copy()
        //public static <T> void copy(List<? super T> dest,List<? extends T> src)
        //Collections.copy(new ArrayList<Number>(), new ArrayList<Number());
        //Collections.copy(new ArrayList<Number>(), new ArrayList<Integer());

        // Enum    public static <T extends Enum<T>> T valueOf(Class<T> enumType,String name) {

        /**
         * 虽然可以编译过，但是会报错ClassCastException
        List abc =new ArrayList<>();
        abc.add(1);
        List<? extends Map >ee=abc;
        for (Map me:ee){
            System.out.println(me);
        }
         */
    }




}


